// 链式调用 上一次输出是下一次的输入

const fs = require('fs');
const path = require('path');

// fs.readFile(path.resolve(__dirname, './a.txt'), 'utf-8', function (err, data) {
//     if (err) return err;
//     fs.readFile(path.resolve(__dirname, './b.txt'), 'utf-8', function (err, data) {
//         if (err) return err;
//         console.log(data)
//     })
// })

const readFile = (url, encoding) => {
    return new Promise((resolve, reject) => {
        fs.readFile(url, encoding, function (err, data) {
            if (err) {
                reject(err);
                return null;
            }
           resolve(data)
        })
    })
}

//1.Promise中then传入的方法，返回的结果如果不是promise，那么会将这个结果传递给下一次then的成功中去
//2.如果then中传递的方法在执行的时候报错，则会执行下一次then的失败
//3.如果then中的传递的方法返回的是一个promise，则会跟句promise的状态来判断是执行下一次的then或者失败
readFile(path.resolve(__dirname, './a.txt'), 'utf-8').then(res => {
    console.log(res);
    return 1
}).then(res => {
    console.log(res);
})

readFile(path.resolve(__dirname, './b.txt'), 'utf-8').then(res => {
    console.log(res);
    throw new Error('123')
}).then(res => {
    console.log(res);
}, (err) => {
    console.log(err)
})